package modules::victorina_poligon;

use module;
use vars '@ISA';
@ISA = ("module");
use DBI;
use encoding "utf8";
use utf8;

$db_victorina = 'victorina';
$db_user = 'ipse';
$db_password = '260891';
$db_host = 'localhost';
$db_port = '3306';

sub got_groupchat_victorina {
my ($pkg,%args) = @_;
my (@words_vi) = split(/ /,$args{body}); # тело сообщения
# $args{from} - jid конференции
# $args{resource} - ник отправителя 
# $args{jid} - jid конференции
# $args{tag} - message
# $args{type} - groupchat
# $args{other} - HASH(0x8aa9470)
if ($args{from} eq "ipse\@conference.jabber.ru") {
#приводит первое слово ответа к нижнему регистру
$words_vi[0] =~ tr/АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ/абвгдежзийклмнопрстуфхцчшщъыьэюяё/;	

if ($args{resource} eq "ipse") {
	if ($words_vi[0] eq "сл") { $nomer_igry=1;}
	if ($words_vi[0] eq "ожидание") { $ctl_ozh=$words_vi[1];}
#	if ($words_vi[0] eq "база") { 
#	$nomer_bazy=$words_vi[1];
#	$nomer_igry=1;
#        $num_base_flag=1;
#        }
        if ($words_vi[0] eq "старт") { $ctl_rezhim=1;}
        if ($words_vi[0] eq "стоп") { 
                   $nomer_igry=0; 
                   $ctl_rezhim=0;
                   $messaga = "Игра остановлена.";
                   $ctl_mess = 1;
        }
       
}
if ($args{resource} eq "Дeд Яга") {
        if ($words_vi[0] eq "сл") { $nomer_igry=1;}
	if ($words_vi[0] eq "ожидание") { $ctl_ozh=$words_vi[1];}
        if ($words_vi[0] eq "старт") { $ctl_rezhim=1;}
        if ($words_vi[0] eq "стоп") { 
                   $nomer_igry=0; 
                   $ctl_rezhim=0;
                   $messaga = "Игра остановлена.";
                   $ctl_mess = 1;
        }
       
}

if ($ctl_igr<1 && $ctl_rezhim==1) {
	$nomer_igry=1;
	$ctl_ozh=30;
	$nomer_bazy="2";
	$num_base_flag=0;

	$dbh = DBI->connect("DBI:mysql:$db_victorina:$db_host:$db_port", $db_user, $db_password);
        $dbh->do("SET NAMES utf8");
        $nazv_bazy = "var$nomer_bazy";
        $sql = "SELECT
	            num,
	            vopros,
	            otvet
	            FROM
	            $nazv_bazy";
        $sth = $dbh->prepare($sql);
        $sth->execute();
        $rv = $sth->rows;
        $sth->finish;
        $dbh->disconnect();
}
if ($nomer_igry == 1&& $ctl_rezhim==1) {
#%usercount = ();
#open (COUNT, "/home/ipse/perlbot/jpb-0.3.3/counter");
#      while (<COUNT>) {
#      if (/(.*) (.*)/) {$usercount{$1}=$2;}
#      }
#	close COUNT;
		
	$dbh = DBI->connect("DBI:mysql:$db_victorina:$db_host:$db_port", $db_user, $db_password);
        $dbh->do("SET NAMES utf8");
        $sql = "SELECT
                    id,
                    igrok,
                    ball
                    FROM
                    schet_poligon";
        $sth = $dbh->prepare($sql);
        $sth->execute();
        $sth->bind_columns(\$id, \$igrok, \$ball);
        %usercount = ();
        while ($sth->fetch()) {
        $usercount{$igrok}=$ball;
        }
        $sth->finish;

        $sluchayn = int(rand($rv));
        $sql = "SELECT
	            num,
	            vopros,
	            otvet
	            FROM
	            $nazv_bazy
                    WHERE
                    num='$sluchayn'";
        $sth = $dbh->prepare($sql);
        $sth->execute();
        $sth->bind_columns(\$num, \$vopros, \$otvet);
        $sth->fetch();

        utf8::decode($vopros);
        $ctl_vopros = $vopros;
        $ctl_otvet = $otvet;
        utf8::decode($ctl_otvet);

        $sth->finish;
        $dbh->disconnect();
        
        if ($num_base_flag==1) {$messaga_plus = "Выбрана база $nomer_bazy с числом вопросов $rv\n";}
	$ctl_vopros =~ tr/ехаос/exaoc/; # Защита от читеров
        $messaga =  "$messaga_plus"."Внимание, вопрос:\n$ctl_vopros";
        $ctl_mess = 1;
        $ctl_time=time;
        $ctl_bukv=0;
        $ctl_igr=1;
        $nomer_igry=0;
        $bukvy = "";
        $zvezdy = "";
        $num_base_flag=0;
        $messaga_plus="";
        $pozicia_probela=0;
        @bukva = ();
}
$ctl_time2=time;
$otvet_uch = join ' ', @words_vi;
$otvet_uch =~ tr/АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ/абвгдежзийклмнопрстуфхцчшщъыьэюяё/;
if ($ctl_otvet eq $otvet_uch) {
	$usercount{$args{resource}}++;
	$messaga = "$args{resource}, ты правильно ответил, это \"$ctl_otvet\". Получаешь 1 балл. Твой счет становится: $usercount{$args{resource}} баллов";
	$ctl_mess = 1;
	$nomer_igry=1;
#	open (RECORDS, ">/home/ipse/perlbot/jpb-0.3.3/counter");
#	while ( my ($key, $value) = each(%usercount) ) {
#        print RECORDS "$key $value\n";
#        }
#	close RECORDS;

	$dbh = DBI->connect("DBI:mysql:$db_victorina:$db_host:$db_port", $db_user, $db_password);
        $dbh->do("SET NAMES utf8");
        if ($usercount{$args{resource}} == 1) {
        $sql = "INSERT INTO
		          schet_poligon
		         (igrok,ball)
		          VALUES
		         ('$args{resource}','$usercount{$args{resource}}')";
} else {
        $sql = "UPDATE
		          schet_poligon
		    SET
		          igrok='$args{resource}',
		          ball='$usercount{$args{resource}}'
		    WHERE
		          igrok LIKE '$args{resource}'";
}
        $dbh->do($sql);
        $dbh->disconnect();
}
# Подсказка
if ($ctl_time2>=$ctl_time+$ctl_ozh &&
                $nomer_igry==0 &&
		$words_vi[0] ne "топ" &&
                $ctl_mess != 1) {
unless (@bukva) {
	@bukva=split //, $ctl_otvet;
        $ctl_otvet_pod = $ctl_otvet;
        $ctl_otvet_pod =~ s/\w/*/g;
        $kolich_bukv = $#bukva;
}
if ($ctl_bukv<$kolich_bukv) {
        $ocheredn_bukv = shift @bukva;
	    if ($ocheredn_bukv =~ /\w/) {
	       $ctl_otvet_pod =~ s/\*/$ocheredn_bukv/;
	       $ctl_time=$ctl_time2;
	       $messaga = "Подсказка: \"$ctl_otvet_pod\"";
               $ctl_bukv++;
               $ctl_mess = 1;
	    }
    } elsif ($ctl_bukv==$kolich_bukv) {
    	    $messaga = "Подсказки исчерпаны, вы проиграли. Правильный ответ \"$ctl_otvet\"";
	    $ctl_bukv = 1;
	    @bukva = ();
	    $nomer_igry=1;
	    $ctl_mess = 1;
    }

}

if ($words_vi[0] eq "счет" && $ctl_mess != 1) {
	if ($#words_vi == 1 && $usercount{$words_vi[1]} ne "") {
	utf8::decode($words_vi[1]);
        $messaga = "$args{resource}: у $words_vi[1] $usercount{$words_vi[1]} баллов.";
        } elsif ($#words_vi == 0 && $usercount{$args{resource}} ne "") {
	$messaga = "$args{resource}: у тебя $usercount{$args{resource}} баллов.";
        } elsif ($#words_vi == 1) {
	$messaga = "$args{resource}: у $words_vi[1] 0 баллов.";
        } else {
	$messaga = "$args{resource}: у тебя 0 баллов.";
        }
	$ctl_mess = 1;	
}
if ($words_vi[0] eq "топ" && $ctl_mess != 1) {
	$messaga = "\n";
        $s=0;
        for (reverse sort { $usercount{$a} <=> $usercount{$b} } keys %usercount ) {
        if ($s<10) {
	$s++;
        $messaga .= "$s)$_ = $usercount{$_} баллов\n";
        }
        }
	$ctl_mess = 1;
}

if ($ctl_mess==1) {
main::SendMessage(to => $args{from}, type => 'groupchat', body => "$messaga");
$ctl_mess=0;
}

}
}

main::pd("................\n\n\n");
1;